.. _cmmStReadMioStatuses: cmmStReadMioStatuses ======================== ------------------------ SYNOPSIS ``````````` .. code-block:: none VT_I4 cmmStReadMioStatuses( [in] VT_I4 Axis, [out] VT_PI4 MioStates ) DESCRIPTION ``````````````` - 이 함수는 현재 모션과 관련된 여러가지 MIO 상태를 반환합니다. 각 비트별로 할당된 MIO 의 상태를 표시하므로 사용자는 비트마스크를 수행하여 원하는 I/O 의 상태를 확인하여야 합니다. 범용적인 모션 응용프로그램에서는 MIO(Machine I/O) 상태를 표현하기 위한 용도로 본 함수의 사용 빈도가 매우 높습니다. PARAMETER ``````````` - Axis: 축번호. 축번호는 상수값으로 [cmX1] 부터 0 번째 축을 기준 축으로 임의의 축을 설정할 수 있습니다. \ - MioStates : Machine I/O 상태 .. csv-table:: :widths: 10 10 75 :header-rows: 1 :stub-columns: 0 Bit No., Name, Meaning 0 (cmIOST_RDY), RDY, Servo ready signal input status(1=ON) 1 (cmIOST_ALM), ALM, Alarm signal status(1=ON) 2 (cmIOST_ELP), +EL, Positive limit switch status(1=ON) 3 (cmIOST_ELN), -EL, Negative limit switch status(1=ON) 4 (cmIOST_ORG), ORG, Origin switch status(1=ON) 5 (cmIOST_DIR), DIR, Operating direction status(1=ON) 6 (cmIOST_RSV1), Reserved, 7 (cmIOST_PCS), PCS, PCS signal input status(1=ON) 8 (cmIOST_ERC), ERC, ERC pin output status(1=ON) 9 (cmIOST_EZ), EZ, Index signal status(1=ON) 10 (cmIOST_CLR), CLR, Clear input status(1=ON) 11 (cmIOST_LTC), Latch, Latch signal input status(1=ON) 12 (cmIOST_SD), SD, Slow Down signal input status(1=ON) 13 (cmIOST_INP), INP, In-Position signal input status(1=ON) 14 (cmIOST_DRP), DRP, +DR input signal status(1=ON) 15 (cmIOST_DRN), DRN, -DR input signal status(1=ON) 16 (cmIOST_STA), STA, STA input signal status(1=ON) 17 (cmIOST_STP), STP, STP input signal status(1=ON) 18 ~31, Reserved RETURN VALUE ````````````` .. csv-table:: :widths: 10 85 :header-rows: 1 :stub-columns: 0 Value, Meaning 음수, 수행 실패 cmERR_NONE, 수행 성공 REFERENCE ``````````` - 논리적 거리 단위는 cmmCfgSetUnitDist() 함수에 의해 결정됩니다. EXAMPLE ``````````` .. code-block:: c++ :linenos: :emphasize-lines: 5 C/C++ long dwMioState = 0; cmmStReadMioStatuses(cmX1, &dwMioState); // dwMioState 의 값을 오른쪽으로 쉬프트 연산(Shift Operation) 하여, 해당 상태 값을 얻습니다. BOOL RDY_State = (dwMioState >> cmIOST_RDY) & 0x1; BOOL ALM_State = (dwMioState >> cmIOST_ALM) & 0x1; BOOL ELP_State = (dwMioState >> cmIOST_ELP) & 0x1; BOOL ELN_State = (dwMioState >> cmIOST_ELN) & 0x1; ……… ……… .. code-block:: none :linenos: Visual Basic Dim dwMioState As Long Dim RDY_State, ALM_State, ELP_State, ELN_State As Boolean ‘ dwMioState 의 값을 오른쪽으로 쉬프트 연산(Shift Operation) 하여, 해당 상태 값을 얻습니다. CMMSDK 는 ‘ 비쥬얼 베이직 사용자를 위해서 편리한 비트 연산 함수를 제공합니다. 아래의 예제에서는 cmmGnBitShift ‘함수 를 이용해 비트연산을 용이하게 수행하고 있습니다. Call cmmStReadMioStatuses(cmX1, dwMioState) Call cmmGnBitShift(dwMioState,-cmIOST_RDY, RDY_State) And 1 Call cmmGnBitShift(dwMioState,-cmIOST_ALM, ALM_State) And 1 Call cmmGnBitShift(dwMioState,-cmIOST_ELP, ELP_State) And 1 Call cmmGnBitShift(dwMioState,-cmIOST_ELN, ELN_State) And 1 RDY_State = ((RDY_State) And &H1) ALM_State = ((ALM_State) And &H1) ELP_State = ((ELP_State) And &H1) ELN_State = ((ELN_State) And &H1) ……… ……… .. code-block:: none :linenos: Delphi Var dwMioState : LongInt; RDY_State : Boolean; ALM_State : Boolean; ELP_State : Boolean; ELN_State : Boolean; begin cmmStReadMioStatuses(cmX1,@dwMioState); // dwMioState 의 값을 오른쪽으로 쉬프트 연산(Shift Operation) 하여, 해당 상태 값을 얻습니다. RDY_State := Boolean((dwMioState shr cmIOST_RDY) and $1); ALM_State := Boolean((dwMioState shr cmIOST_ALM) and $1); ELP_State := Boolean((dwMioState shr cmIOST_ELP) and $1); ELN_State := Boolean((dwMioState shr cmIOST_ELN) and $1); ……… ……… end;